<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 每种字符至少取 K 个 -->
    <script>
      function takeCharacters(s, k) {
        if (k == 0) return k
        let n = s.length,
          dict = [0, 0, 0]
        // 记录s字符串每一个字符的出现次数
        for (let char of s) {
          dict[char.charCodeAt(0) - 'a'.charCodeAt(0)]++
        }
        // 如果字符的次数小于k  则肯定无法找出对应的字符
        if (dict[0] < k || dict[1] < k || dict[2] < k) return -1
        dict[0] -= k // 每一个字符的出现次数减去k
        dict[1] -= k
        dict[2] -= k

        let left = 0,
          right = 0
        let cnt = [0, 0, 0]
        const compare = () => {
          // 如果中间子串字符的次数大于dict
          // 需要移动窗口 所以返回 true
          if (cnt[0] > dict[0] || cnt[1] > dict[1] || cnt[2] > dict[2]) return true
          return false // 中间字符的字符个数都在有效数以内
        }
        let len = 0
        while (right < n) {
          // 右边加入的字符  cnt次数增加
          cnt[s[right].charCodeAt(0) - 'a'.charCodeAt(0)]++
          while (compare()) {
            // 左指针移动
            // 移出窗口的元素 cnt次数减少
            cnt[s[left].charCodeAt(0) - 'a'.charCodeAt(0)]--
            left++
          }
          // 去中间子串最大值
          len = Math.max(len, right - left + 1)
          right++
        }
        // 字符串长度减去 中间子串的长度
        return s.length - len
      }
      console.log(takeCharacters('aabaaaacaabc', 2))
    </script>
  </body>
</html>
